package com.atguigu.algorithm;

import java.util.Arrays;

/**
 * @Author: shenhao
 * @CreatTime: 2024/10/31 19:49
 * @Version: 1.0
 * 移除元素
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。
 * 元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
 */
public class LeetCode027 {
    public static void main(String[] args) {
        int[] nums=new int[]{3,2,2,3};
        int i = removeElement(nums, 3);
        System.out.println(i+" "+ Arrays.toString(nums));
    }
    public static int removeElement(int[] nums, int val) {
        //nums = [0,1,2,2,3,0,4,2], val = 2
        //给 nums[slow] 赋值然后再给 slow++，这样可以保证 nums[0..slow-1]是不包含值为 val 的元素的，
        // 最后的返回的slow指针槽位，刚好就是数组长度就是nums.length=5，注意数组长度为5，数组下标index从0-4
        // 指针槽位号 = 数组长度length = 数组下标从0至length-1
        int slow = 0; int fast = 0;
        while (fast < nums.length) {
            if (nums[fast] != val) {
                nums[slow++] = nums[fast];
            }
            fast++;
        }
        //下标从零开始，slow指针槽位号刚好就是数组长度
        return slow;
    }
}
